﻿using System;

using System.Collections.Generic;
using System.Linq;
using System.Text;
using Inventario_HardSoft.ADO;
using System.Data;
using Microsoft.Office.Interop.Excel;
using System.Reflection;
using Excel = Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.ComponentModel;

namespace Inventario_HardSoft.Controlador
{
    class Ctrl_Reg_MultUsuarios
    {                          
        public Ctrl_Reg_MultUsuarios()
        {                        
            
        }
        

        internal void getTablefromExcel(DataGridView dg, string filename)
        {
            Microsoft.Office.Interop.Excel.Application xlApp;
            Workbook xlWorkBook;
            Worksheet xlWorkSheet;
            var missing = Missing.Value;
            xlApp = new Excel.Application();
            xlWorkBook = xlApp.Workbooks.Open(filename, false, true, missing, missing, missing, true, Excel.XlPlatform.xlWindows, '\t', false, false, 0, false, true, 0);
            xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
            Excel.Range xlRange = xlWorkSheet.UsedRange;
            Array myValues = (Array)xlRange.Cells.Value2;
            int vertical = myValues.GetLength(0);
            int horizontal = myValues.GetLength(1);
            System.Data.DataTable dt = new System.Data.DataTable();

            dg.Rows.Clear();
            dg.Columns.Clear();

            //obtenemos la informacion de la cabecera
            for (int i = 1; i <= horizontal; i++)
            {
                dt.Columns.Add(i.ToString());

                DataGridViewTextBoxColumn dgcolumn = new DataGridViewTextBoxColumn();
                dgcolumn.Name = (string)myValues.GetValue(1, i) ?? "vacio";
                dgcolumn.HeaderText = (string)myValues.GetValue(1, i) ?? string.Empty;
                dgcolumn.ValueType = typeof(string);
                dgcolumn.SortMode = DataGridViewColumnSortMode.NotSortable;
                dgcolumn.ReadOnly = true;
                dg.Columns.Add(dgcolumn);
            }

            //obtenemos la informacion de la fila
            for (int x = 2; x <= vertical; x++)
            {
                DataGridViewRow dgrow = new DataGridViewRow();
                dgrow.CreateCells(dg);

                for (int y = 1; y <= horizontal; y++)
                {
                    dgrow.Cells[y - 1].Value = myValues.GetValue(x, y) ?? string.Empty;
                }

                dg.Rows.Add(dgrow);
            }

            xlWorkBook.Close(false, missing, missing);
            xlApp.Workbooks.Close();
            xlApp.Quit();
            Marshal.ReleaseComObject(xlRange);
            Marshal.ReleaseComObject(xlApp);
            Marshal.ReleaseComObject(xlWorkSheet);
            Marshal.ReleaseComObject(xlWorkBook);
            xlWorkSheet = null;
            xlWorkBook = null;
            xlApp = null;
            GC.Collect();
        }

        internal DialogResult regUsuariosxEquipoxPrograma(System.Data.DataTable dt)
        {
            UserTable usuario;
            DialogResult regUsuario = DialogResult.Cancel;

            foreach (DataRow row in dt.Rows)
            {
                #region registrar cada campo
                usuario = new UserTable()
                        {
                            codigo_Usuario = row[0].ToString(),
                            Nombre_Usuario = row[1].ToString(),
                            Sucursal_Usuario = row[2].ToString(),
                            Area_Dpto_Usuario = row[3].ToString(),
                            UserWindows_Usuario = row[4].ToString(),
                            UserAS400DBS = row[5].ToString(),

                            //Equipo
                            desktopmarca = row[6].ToString(),
                            desktopmodelo = row[7].ToString(),
                            desktopserie = row[8].ToString(),

                            pantallamarca = row[9].ToString(),
                            pantallamodelo = row[10].ToString(),
                            pantallaserie = row[11].ToString(),

                            tecladomarca = row[12].ToString(),
                            tecladomodelo = row[13].ToString(),
                            tecladoserie = row[14].ToString(),

                            laptopmarca = row[15].ToString(),
                            laptopmodelo = row[16].ToString(),
                            laptopserie = row[17].ToString(),

                            mousemarca = row[18].ToString(),
                            mousemodelo = row[19].ToString(),
                            mouseserie = row[20].ToString(),

                            impresoramarca = row[21].ToString(),
                            impresoramodelo = row[22].ToString(),
                            impresoraserie = row[23].ToString(),

                            impresoramatricialmarca = row[24].ToString(),
                            impresoramatricialmodelo = row[25].ToString(),
                            impresoramatricialserie = row[26].ToString(),

                            discoexternomarca = row[27].ToString(),
                            discoexternomodelo = row[28].ToString(),
                            discoexternoserie = row[29].ToString(),

                            modemusbmarca = row[30].ToString(),
                            modemusbmodelo = row[31].ToString(),
                            modemusbserie = row[32].ToString(),

                            //Programa
                            windowsxp = row[33].ToString(),
                            windows7 = row[34].ToString(),
                            mcafee = row[35].ToString(),
                            iexplore = row[36].ToString(),
                            mflashplayer = row[37].ToString(),
                            lotusnotes = row[38].ToString(),
                            acrordr32 = row[39].ToString(),
                            msoffice = row[40].ToString(),
                            visoroffice = row[41].ToString(),
                            winrar = row[42].ToString(),
                            winzip = row[43].ToString(),
                            visio = row[44].ToString(),
                            project = row[45].ToString(),
                            clientaccess = row[46].ToString(),
                            vpn = row[47].ToString(),
                            adryan = row[48].ToString(),
                            rencot = row[49].ToString(),
                            unicot = row[50].ToString(),
                            spring = row[51].ToString(),
                            dbs = row[52].ToString(),
                            cotmail = row[53].ToString(),
                            sisweb = row[54].ToString(),
                            facturacionmanual = row[55].ToString(),
                            regventas = row[56].ToString(),
                            plancuentas = row[57].ToString(),
                            preliquidaciones = row[58].ToString(),
                            contratomarcos = row[59].ToString(),
                            desconfirmadocumentos = row[60].ToString(),
                            citrix_cuentascontactos = row[61].ToString(),
                            citrix_sistmateriales = row[62].ToString(),
                            citrix_sconcat = row[63].ToString(),
                            citrix_comprarepuestos = row[64].ToString(),
                            aplicacioneslotus = row[65].ToString()
                        };     
                #endregion                                

                //asignar cada programa a cada equipo
                usuario.asignarUsuario();
                usuario.asignarProgramas();
                usuario.asignarEquipos();

                string idUsuario = usuario.registrarUsuario();
                string idEquipo = usuario.registrarEquipos(idUsuario);
                bool result = usuario.registrarProgramas(idEquipo);

                if (result)
                {
                    regUsuario = DialogResult.OK;
                }
                else
                {
                    regUsuario = DialogResult.Cancel;
                }
            }

            return regUsuario;
        }
    }
}
